注:建议使用“实例对象”的表述而不是“实例”,是因为 Python 中的一切皆为对象,目前来说你只需知道这个概念即可。
不过为了节省版面,使用“实例”的表述也是完全可以的。
代码保存在 python_work/car.py 文件中
self 的写法只是一个惯例,你完全可以使用其他的写法,比如 cls 或是 this 等
类的属性可以简单地理解为“有些什么”
类的方法可以简单地理解为“能做什么”
在这里,命名约定很有用:
通常可以认为首字母大写的名称(如 Dog)指的是类,
而全小写的名称(如 my_dog)指的是根据类创建的实例。
在这个示例中,创建了两条小狗,分别名为Willie 和Lucy。每条小狗都是一个独立的实例,有自己的一组属性,能够执行相同的操作。
你可以创建属性完全相同的新实例,比如给第二条小狗指定同样的名字和年龄,这个实例看起来没什么不同,但这个实例是 Python是根据 Dog 类创建另一个新的实例。
odometer reading:里程表读数
扩展 update_odometer() 方法部分略,可参考原书以禁止将里程表读数往回调:
类的第二个单词依然用大写字母
类的第二个单词依然用大写字母
ElectricCar 类中可以添加任意的特殊属性或方法,但如果要添加的属性或方法是所有汽车都有的,那应该考虑将其添加进 Car 类。
ElectricCar 类只包含处理电动汽车特有属性和行为的代码。
当重写方法时,不建议改变原有父类的逻辑。
例如例子中仅仅是对描述信息做了补充,让其包含了电动汽车特有的电池容量属性信息。
剪切:复制并删除,然后再粘贴(意思就是删除 ElectricCar 类中这个方法的代码,然后粘贴到这里,当然需要把属性名从 battery_size 改为 size)
当重写方法时,不建议改变原有父类的逻辑。
例如例子中仅仅是对描述信息做了补充,让其包含了电动汽车特有的电池容量属性信息。
如果只描述一辆汽车,将 get_range() 方法放在 Battery 类中也许是合适的,但如果要描述一家汽车制造商的整条产品线,也许应该将 get_range() 方法移到 ElectricCar 类中。在这种情况下,get_range() 依然根据电池容量来确定续航里程,但报告的是一款汽车的续
航里程。也可以这样做:仍将 get_range() 方法留在Battery 类中,但向它传递一个参数,如 car_model。此时,get_range() 方法可以根据电池容量和汽车型号报告续航里程。
文件的命名也应遵循蛇形命名法
完整代码限于版面略,请参考原书
导入类是一种高效的编程方式。通过将这个类移到一个模块中并导入该模块,依然可使用其所有功能,但主程序文件变得整洁易读了。这还让你能够将大部分逻辑存储在独立的文件中。在确定类能像你希望的那样工作后,就可以不管这些文件,专注于主程序的高级逻辑了。
完整代码限于版面略,请参考原书
完整代码限于版面略,请参考原书
完整代码限于版面略,请参考原书
由于是随机的,运行的结果不一定相同
注意:在创建与安全相关的应用程序时,不要使用模块 random,但它能用来创建众多有趣的项目。
由于是随机的,运行的结果不一定相同
Python 3 Module of the Week:https://pymotw.com/3/
这是一个不错的持续介绍 Python 中外部模块的网站。
当然,还有一个常量命名法